home *** CD-ROM | disk | FTP | other *** search
/ Hottest 6 / Hottest 6 (1996)(PDSoft)[!].iso / software / emulators / tap3zxs / source / tap3zxs.c < prev    next >
C/C++ Source or Header  |  1978-11-24  |  3KB  |  113 lines

  1. /*  Convert .TAP file from stdin to .ZXS file to stdout.
  2. stderr for report/list
  3. (C)1995 @BABOLO V.M 1.2 29.06.95
  4. My e-mail address is: babolo@relcom.net or babolo@kiae.su
  5. My web is: http://relcom.eu.net/zx/
  6. Help me to collect all ZX software
  7. */
  8.  
  9. /* MSDOS version created 8/7/95 B.Baylis@cs.ucl.ac.uk */
  10.  
  11. /* This file was modified when I created the MSDOS version 
  12.  
  13.    stdin and stdout are no longer used, the .TAP input is first parameter on
  14.    command line, and the .ZXS output the second parameter.
  15.  
  16.    This was done so I use could the convertors with batch files and aliases
  17.  
  18. */
  19.  
  20.  
  21. #include <sys/types.h>
  22. #include <sys/stat.h>
  23. #include <stdio.h>
  24. #define TF stderr
  25. /*#define IF stdin*/
  26. /*#define OF stdout*/
  27. #define DB(h,l) ((((h)&0377)<<8)+((l)&0377))
  28. #include "cnvout.h"
  29.  
  30. FILE * OF;
  31. FILE * IF;
  32.  
  33. int byt, blk, nu, i;
  34. char x;
  35.  
  36. static void pt(c)
  37.     int c;
  38. {   c&=0377; 
  39.     fputc(c,OF); 
  40.     x^=c;
  41.     if(((byt++)&~0777)!=0){ blk++; byt&=0777;};
  42. };
  43.  
  44. static int gc()
  45. {   int c;
  46.     c=fgetc(IF);
  47.     if(c==EOF){fprintf(TF," length underflow\n"); exit(1); };
  48.     return(c&0377);
  49. };
  50.  
  51. int main(argc, argv) int argc; char *argv[];
  52. {   char hd[19];
  53.     int hdp, b, b0, b1;
  54.     long l;
  55.  
  56.     IF=fopen(argv[1],"rb");
  57.  
  58.     OF=fopen(argv[2],"wb");
  59.  
  60.     for(nu=0,byt=0,blk=0
  61.     ;   EOF!=(b0=getc(IF))
  62.         &&  EOF!=(b1=getc(IF))
  63.         &&  (0!=(l=DB(b1,b0)))
  64.     ;)
  65.  
  66.     {   dp(nu++,3);
  67.  
  68.         if((l+5)>0177777)
  69.         {   fprintf(TF," length overflow\n"); exit(1);}
  70.         else
  71.         {   pt(l+5); pt ((l+5)>>8);
  72.             p2e(l-2);
  73.             pt(0); p1e(0); pt(0); p1e(0); pt(0); p1e(0);
  74.  
  75.             for(x=0,i=0;((hdp=i)<19)&&(i!=l);i++)pt(hd[i]=b=gc());
  76.  
  77.             if((hdp>1)&&(hd[0]==0))
  78.             {   p1h(hd[1]); pl2("%c",042);
  79.                 for(i=2;(i<12)&&(i<hdp);i++) pcc(hd[i]);
  80.                 pl2("%c",042);
  81.                 for(i=hdp;i<12;i++) bp(1);
  82.                 if(hdp>=12)p2e((hdp==12)?hd[12]:DB(hd[13],hd[12]));else bp(6);
  83.                 if(hdp>=14)p2e((hdp==14)?hd[14]:DB(hd[15],hd[14]));else bp(6);
  84.                 if(hdp>=16)p2e((hdp==16)?hd[16]:DB(hd[17],hd[16]));else bp(6);
  85.             }
  86.             else{
  87.                 p1c(hd[0]); pl1("=");
  88.                 for(i=1;(i<11)&&(i<hdp);i++) pcc(hd[i]);
  89.                 pl1("=                  ");
  90.                 for(i=(hdp>0)?hdp:1;i<11;i++) bp(1);
  91.         };  };
  92.  
  93.         for(i=hdp;i!=l;i++)pt(b=gc());
  94.         p1e(x); bp(1);
  95.     ee: op(blk,4); pl1("/"); op(byt,3); pl1("\n");
  96.     };
  97.  
  98.     if(b0!=EOF)
  99.     {   dp(nu++,3);
  100.         if(b0!=0){ fprintf(TF," Illegal end\n"); exit(1);};
  101.         if(b1==EOF) pl1(" Zero one");
  102.         else
  103.         {   for(i=2;EOF!=(b=getc(IF));i++)b0|=b;
  104.             p2e(i);
  105.             if(b0==0)pl1(" Zeros");
  106.             else     pl1(" Scrap");
  107.         };
  108.         pl1("\n");
  109.     };
  110.     exit(0);
  111. }
  112.  
  113.